<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <meta name="keywords" content="hexo,个人博客,blog" />
  <meta name="description" content="赚钱，裸辞开店！！" />
  <meta http-equiv="x-dns-prefetch-control" content="on">
  <link rel="dns-prefetch" href="https://busuanzi.ibruce.info">
  <link rel="dns-prefetch" href="https://at.alicdn.com">
  
  <link rel="dns-prefetch" href="https://widget.daovoice.io">
  <link rel="dns-prefetch" href="https://widget-static-cdn.daovoice.io">
  <link rel="dns-prefetch" href="https://im.daovoice.io">
  
  
  <link rel="dns-prefetch" href="https://hm.baidu.com/">
  
  
  <link rel="stylesheet" type="text/css" href="/./style/main.css">
	<link rel="shortcut icon" href="/favicon.ico" title="Favicon">
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/gitalk@1/dist/gitalk.css">
	<title>简单的Nginx命令及配置</title>
  
  <script>var _hmt=_hmt||[];(function(){var hm=document.createElement("script");hm.src="https://hm.baidu.com/hm.js?awwssw1snsnsnn1ndndnndnd99j";var s=document.getElementsByTagName("script")[0];s.parentNode.insertBefore(hm,s);})();
  </script>
  
  
    <script>(function(i,s,o,g,r,a,m){i["DaoVoiceObject"]=r;i[r]=i[r]||function(){(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;a.charset="utf-8";m.parentNode.insertBefore(a,m)})(window,document,"script",('https:' == document.location.protocol ? 'https:' : 'http:') + "//widget.daovoice.io/widget/123456.js","daovoice");daovoice('init',{app_id: "123456"});daovoice('update');
  </script>
  
<meta name="generator" content="Hexo 6.3.0"></head>
<body>
  <canvas id="pattern-placeholder" height="230"></canvas>
<div class="navbar-header">
  <a class="blog-title" href="/">Kyist</a>
  <a class="face-img" href="/">
    <img src="/img/zz.png">
  </a>
</div>
<main>
  <div class="article-title">
    
  
  <h1 class="title">
    简单的Nginx命令及配置
  </h1>
  


    <ul class="article-info">
      <li>
        发布
        <time datetime="2023-02-12T16:10:50.000Z" itemprop="datePublished">2023-02-13</time>
      </li>
      <li>
        
    更新 <time datetime="2023-02-27T14:01:40.113Z" itemprop="dateUpdated">2023-02-27</time>

      </li>
      <li id="busuanzi_container_page_pv">
        阅读 <span id="busuanzi_value_page_pv"></span>
      </li>
    </ul>
  </div>
  <div class="container">
    <div class="article">
      <div class="content">
        
        <h4 id="常用命令"><a href="#常用命令" class="headerlink" title="常用命令"></a>常用命令</h4><pre><code class="shell"># WIN版：
start nginx # 启动
nginx -s stop # 停止(fast shutdown)
nginx -s quit # 退出(graceful shutdown)
nginx -s reload # 重启

# linux版：
./nginx -v  # 查看 nginx 版本号 

./nginx # 启动 nginx
/usr/local/nginx/sbin/nginx  -c /usr/local/nginx/conf/nginx.conf  # 指定配置文件启动
 
ps -ef|grep nginx  # 查看是否启动成功

./nginx -s stop  # 停止
./nginx -s reload  # 重新加载 nginx
</code></pre>
<h4 id="反向代理"><a href="#反向代理" class="headerlink" title="反向代理"></a>反向代理</h4><pre><code>    upstream wechat &#123; 
        server 127.0.0.1:9000;
    &#125;

    server &#123;
    
        listen       80;
        server_name  www.pinzhi365.com;
    
        location / &#123;
            proxy_pass http://wechat;
        &#125;
    
    &#125;

    # 1 listen *:80 | *:8080 #监听所有80端口和8080端口
    # 2 listen  IP_address:port   #监听指定的地址和端口号
    # 3 listen  IP_address     #监听指定ip地址所有端口
    # 4 listen port     #监听该端口的所有IP连接
</code></pre>
<h4 id="跳转配置"><a href="#跳转配置" class="headerlink" title="跳转配置"></a>跳转配置</h4><pre><code>stream &#123;

    upstream cloudsocket &#123;
       hash $remote_addr consistent;
      # $binary_remote_addr;
       server 192.168.49.130:3306 weight=5 max_fails=3 fail_timeout=30s;
    &#125;
    server &#123;
       listen *:3306;#数据库服务器监听端口
       proxy_connect_timeout 10s;
       proxy_timeout 300s;#设置客户端和代理服务之间的超时时间，如果5分钟内没操作将自动断开。
       proxy_pass cloudsocket;
    &#125;
&#125;
</code></pre>
<p>注意！！<br>代理与服务端连接设置（要在任务管理器或kill 关掉全部的nginx 再重新启动，reload 可能不生效）</p>
<pre><code>http &#123; 

    keepalive_timeout 60; #客户端与代理的超时时间
    # 指代理与后端真实服务器的连接超时时间。 
    proxy_connect_timeout 90;
    proxy_send_timeout 300;
    proxy_read_timeout 300; 
    send_timeout 300; 

 &#125;
</code></pre>
<p><code>Nginx</code>是一个反向代理服务器，可以通过轮询，加权轮询，<code>ip hash</code>实现负载均衡。</p>
<p>底层采用<code>epoll</code>模型，多路复用，可以实现很高的并发量，而且内存占用小。</p>
<p>一般这个都是运维去管理。可是作为开发还是得知道怎么用才行。</p>
<h3 id="Nginx-配置文件结构"><a href="#Nginx-配置文件结构" class="headerlink" title="Nginx 配置文件结构"></a>Nginx 配置文件结构</h3><pre><code>...              #全局块

events &#123;         #events块
   ...
&#125;

http      #http块
&#123;
    ...   #http全局块
    server        #server块
    &#123; 
        ...       #server全局块
        location [PATTERN]   #location块
        &#123;
            ...
        &#125;
        location [PATTERN] 
        &#123;
            ...
        &#125;
    &#125;
    server
    &#123;
      ...
    &#125;
    ...     #http全局块
&#125;
</code></pre>
<h3 id="全局块"><a href="#全局块" class="headerlink" title="全局块"></a>全局块</h3><p>写在一开始的配置，影响<code>nginx</code>全局的指令。一般有运行<code>nginx</code>服务器的用户组，<code>nginx</code>进程<code>pid</code>存放路径，日志存放路径，配置文件引入，允许生成<code>worker process</code>数等。</p>
<p>如</p>
<pre><code>#user  nobody;                          # 默认运行用户 编译时未指定的话为nobody
worker_processes  4;                    # Nginx主进程要开启多少个工作进程 一般为当前CPU核心数
worker_cpu_affinity 0001 0010 0100 1000;   # 将每个进程绑定到CPU的每个核心上 可以略提高性能

#error_log  logs/error.log;             # 错误日志的位置 默认是安装目录下的logs/error.log
#error_log  logs/error.log  notice;     # 可以在日志后面添加纪录级别 
#error_log  logs/error.log  info;       # 可选项有: [debug|info|notice|warn|error|crit]

#pid        logs/nginx.pid;             # pid文件路径 nginx -s 控制服务就是从这里读取主进程的PID
worker_rlimit_nofile 65535;             # 指定文件描述符数量 增大可以让Nginx处理更多连接
                                    # 还需要增大系统允许进程打开文件描述符的上限 ulimit -n 65536
</code></pre>
<h3 id="events块"><a href="#events块" class="headerlink" title="events块"></a>events块</h3><p>配置影响<code>nginx</code>服务器或与用户的网络连接。有每个进程的最大连接数，选取哪种事件驱动模型处理连接请求，是否允许同时接受多个网路连接，开启多个网络连接序列化等。</p>
<p>如</p>
<pre><code>events &#123;
    accept_mutex on;   #设置网路连接序列化，防止惊群现象发生，默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接，默认为off
    #use epoll;      #事件驱动模型，select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数，默认为512
&#125;
</code></pre>
<h3 id="http块"><a href="#http块" class="headerlink" title="http块"></a>http块</h3><p>可以嵌套多个<code>server</code>，配置代理，缓存，日志定义等绝大多数功能和第三方模块的配置。如文件引入，<code>mime-type</code>定义，日志自定义，是否使用<code>sendfile</code>传输文件，连接超时时间，单连接请求数等。</p>
<p>如</p>
<pre><code class="shell">http &#123;
    include       mime.types;         # 其他的block配置 可以通过include导入 这样可以很方便管理配置
    default_type  application/octet-stream; # 响应类型未定义content-type时 文件默认类型为二进制流 
                                            # mime.types中包含文件扩展名与文件类型映射表

    #log_format  main  &#39;$remote_addr - $remote_user [$time_local] &quot;$request&quot; &#39;
    #                  &#39;$status $body_bytes_sent &quot;$http_referer&quot; &#39;
    #                  &#39;&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;&#39;;
                                      # 定义access.log日志的格式 main为格式名称 

    access_log  logs/access.log  main;      # 默认access.log的位置 以及使用main中定义的格式

    client_max_body_size     20m;           # 设置允许客户上传大小
    client_header_buffer_size   32k;        # 客户端请求 header_buffer大小 默认1k
    large_client_header_buffers  4 32k;     # 指定客户请求header_buffer的缓存最大数量和大小

    sendfile        on;                     # 开启高效的文件传输模式
    tcp_nopush      on;                     # 开启tcp_nopush和tcp_nodelay用于防止网络阻塞
    tcp_nodelay     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;                  # 客户端连接后保持连接的超时时间
    client_header_timeout  10;              # 设置客户端请求头读取超时时间 
                                            # 超时将返回Request time out (408)
    client_body_timeout    10;              # 设置客户端请求主体读取超时时间  超时也将返回408
    send_timeout           10;              # 指定响应客户端的超时时间
                                            # 如果超过这个时间 客户端没有任何活的 Nginx将关闭连接

    gzip  on;                               # 开启还是关闭gzip模块 on表示开启 实时压缩输出数据流
    gzip_min_length  1k;                    # 允许压缩页面最小字节数 小于1k的文件可能越压越大
    gzip_buffers     4  16k;                # 申请4个单位16KB的内存做压缩结果流缓存 默认源文件大小
    gzip_http_version  1.1;                 # 用于识别HTTP协议版本 默认 1.1
    gzip_comp_level  2;                     # 压缩等级 1 表示最快压缩 但压缩比最小 9反之
    gzip_types  text/plain application/x-javascript text/css application/xml;   # 指定压缩类型
    gzip_vary  on;                          # 让前端的缓存服务器缓存经过gzip压缩的页面
    
    # http_proxy 设置
 # 故障转移策略，当后端服务器返回如下错误时，自动负载到后端其余机器
 proxy_next_upstream http_500 http_502 http_503 error timeout invalid_header;
 
 # 设置后端服务器获取用户真实IP、代理者真实IP等
 proxy_redirect off;
 proxy_set_header Host $host;
 proxy_set_header X-Real-IP $remote_addr;
 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
 
 # 用于指定客户端请求主体缓存区大小，可以理解成先保存到本地再传给用户
 client_body_buffer_size 128k;
 
 # 表示与后端服务器连接的超时时间，即发起握手等侯响应的超时时间
 proxy_connect_timeout 90;
 
 # 表示后端服务器的数据回传时间，即在规定时间之后端服务器必须传完所有的数据，否则 Nginx 将断开这个连接
 proxy_send_timeout 90;
 
 # 设置 Nginx 从代理的后端服务器获取信息的时间，表示连接建立成功后，Nginx 等待后端服务器的响应时间，其实是 Nginx 已经进入后端的排队中等候处理的时间
 proxy_read_timeout 90;
 
 # 设置缓冲区大小，默认该缓冲区大小等于指令 proxy_buffers 设置的大小
 proxy_buffer_size 4k;
 
 # 设置缓冲区的数量和大小。Nginx 从代理的后端服务器获取的响应信息，会放置到缓冲区
 proxy_buffers 4 32k;
 
 # 用于设置系统很忙时可以使用的 proxy_buffers 大小，官方推荐大小为 proxu_buffers 的两倍
 proxy_busy_buffers_size 64k;
 
 # 指定 proxy 缓存临时文件的大小
 proxy_temp_file_write_size 64k;
    ...
&#125;
</code></pre>
<p>代理部分也可以配置在<code>server</code>中。</p>
<h3 id="server-块"><a href="#server-块" class="headerlink" title="server 块"></a>server 块</h3><p><code>server</code>是在<code>http</code>中的，用于配置虚拟主机的相关参数，一个<code>http</code>中可以有多个<code>server</code>。</p>
<p>如</p>
<pre><code>server &#123;                                # server段就是虚拟主机的配置
    listen       80;                    # 监听所有IP的80端口 可以指定单个IP
    server_name  localhost  example.com;;             # 用来指定IP地址或域名 多个域名间用空格分开

    #charset utf-8;;                    # 用于设置网页默认编码

    #access_log  logs/host.access.log  main;    # 每一个虚拟主机也可以定义单独的access.log

    location / &#123;                        # URL地址匹配设置
        root   /var/www/html;           # 网页根目录
        index  index.html index.htm;    # 默认首页地址 会先寻找index.html 然后往后
    &#125;

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$  &#123;   # 匹配以这些格式结尾的请求
        root    /var/www/static;                    # 匹配到的请求从这个目录找文件
        expires 30d;                                # 客户端缓存静态文件过期时间30天
    &#125;


    error_page  404              /404.html;         # 自定义404页面 /404.html为root指定的位置

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;        # 自定义50x页面 到/50x.html
    location = /50x.html &#123;                          # 匹配50x页面的请求
        root   html;                                # 匹配到的请求从这个目录找文件
    &#125;

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    location ~ \.php$ &#123;                             # 匹配php页面的请求
        index index.php                             # 默认索引index.php
        proxy_pass   http://127.0.0.1               # 匹配到的请求转发到本机80端口处理
    &#125;

    location ~ \.jsp$ &#123;                             # 匹配jsp页面的请求
        index index.jsp                             # 默认索引index.jsp
        proxy_pass   http://127.0.0.1:8080          # 匹配到的请求转发到本机8080端口处理
    &#125;

    location /status &#123;                              # 匹配status的请求
        stub_status on;                             # 开启Nginx工作状态统计
        access_log    logs/status.log;              # 状态统计页面访问日志
        auth_basic    &quot;Nginx Status&quot;;               # 自定义提醒 认证界面会显示
        auth_basic_user_file    /var/www/htpasswd;  # 认证密码文件 htpasswd工具由httpd提供
        deny 127.0.0.1;  #拒绝的ip
        allow 172.18.5.54; #允许的ip 
        allow 192.168.10.100;
     allow 172.29.73.0/24;
     deny all;
    &#125;                                               # 访问http://host/status 就可以看到状态统计了

 

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ &#123;                    # FastCGI模式
    #    root           /var/www/html;      # php页面根目录
    #    fastcgi_pass   127.0.0.1:9000;     # FastCGI监听地址 也可以使用unix套接字监听地址
    #    fastcgi_index  index.php;          # 索引文件
    #    fastcgi_param  SCRIPT_FILENAME  /var/www/html$fastcgi_script_name;  # php脚本全路径
    #    include        fastcgi_params;
    #&#125;

    # deny access to .htaccess files, if Apache&#39;s document root
    # concurs with nginx&#39;s one
    #
    #location ~ /\.ht &#123;                     # 匹配ht开头的文件
    #    deny  all;                         # 规则是全部拒绝
    #&#125;
    &#125;
</code></pre>
<h3 id="location-块"><a href="#location-块" class="headerlink" title="location 块"></a>location 块</h3><p><code>location</code>是在<code>server</code>中的，一个<code>server</code>可以有多个<code>location</code>，用于配置请求的路由，以及各种页面的处理情况。如实现动静分离，请求转发。</p>
<p>请求中带 <code>/api/</code> 的转发到 <code>http://192.168.76.10:9000</code>;</p>
<pre><code class="shell">server &#123;
        listen       80;
        server_name  localhost;  #服务器域名
        location / &#123;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;  #保留原本ip
            proxy_set_header X-Forwarded-For $remote_addr; #保留原本ip
           
            root   html/default; #网页根目录（/usr/local/nginx/html/default/）
            index  index.html index.htm; 

            # autoindex   on; # 开启索引
        &#125;
        location /api/ &#123;
            proxy_pass  http://192.168.76.10:9000; 
            proxy_set_header Host $host;
        &#125;
&#125;
</code></pre>
<p>单独定义 <code>html</code>页面、图片、<code>js</code>脚本等静态资源入口，可简化访问路径</p>
<pre><code class="shell">server &#123;
        listen       80;
        server_name  localhost;  
        location / &#123;
            proxy_set_header Host $host; 
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;

            root   html/default; #网页根目录（/usr/local/nginx/html/default/）
            index  index.html index.htm; 
        &#125;
        location /api/ &#123;
            proxy_pass  http://192.168.76.10:9000; # 动态资源，后台接口
            proxy_set_header Host $host;
        &#125;
        location /image/ &#123;
            root  html/default/static;  # 静态资源 - 图片
            # autoindex   on;
        &#125;
        location /page/ &#123;
            root  html/default/static;  # 静态资源 - html页面
            # autoindex   on;
        &#125;
&#125;
</code></pre>
<p>如果请求这个 <code>http://192.168.76.100/image/a.png</code></p>
<p>访问图片是 <code>/usr/local/nginx/html/default/static/image/a.png</code></p>
<p>如果请求 <code>http://192.168.76.100/static/image/a.png</code></p>
<p>访问图片 <code>/usr/local/nginx/html/default/static/image/a.png</code></p>
<p>即  <code>/usr/local/nginx/ + 配置的root目录 + URL中匹配的资源路径</code></p>
<p><code>root</code> 后面的参数，如果是 &#x2F; 开始，代表的是 <code>linux</code> 根目录下的目录，非 &#x2F; 开始代表的是从 <code>nginx</code> 目录下开始</p>
<p><code>root</code> 后面的参数，如果是 &#x2F; 结尾，则 <code>location</code> 后面的参数，就不用以 &#x2F; 开始，否则必须以 &#x2F; 开始</p>
<h3 id="upstream"><a href="#upstream" class="headerlink" title="upstream"></a>upstream</h3><p>在<code>location</code>中有一个这个</p>
<pre><code class="shell">location ~ \.jsp$ &#123;                             # 匹配jsp页面的请求
    index index.jsp                             # 默认索引index.jsp
    proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
&#125;
</code></pre>
<p>而 <code>mysvr</code> 就是配置的 <code>upstream</code>。和<code>server</code>平级，一般用于负载均衡。</p>
<h4 id="热备"><a href="#热备" class="headerlink" title="热备"></a>热备</h4><p>如果你有2台服务器，当一台服务器发生事故时，才启用第二台服务器给提供服务。</p>
<pre><code class="shell">upstream mysvr &#123; 
    server 127.0.0.1:7878; 
    server 192.168.10.121:3333 backup;  #热备     
&#125;
</code></pre>
<h4 id="轮询"><a href="#轮询" class="headerlink" title="轮询"></a>轮询</h4><pre><code>nginx`默认就是轮询其权重都默认为1，服务器处理请求的顺序：`ABABABABAB....
upstream mysvr &#123; 
    server 192.168.10.121:3333;
    server 192.168.10.122:3333;
&#125;
server &#123;
    ....
    location  ~*^.+$ &#123;         
        proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表         
    &#125;
&#125;
</code></pre>
<h4 id="加权轮询"><a href="#加权轮询" class="headerlink" title="加权轮询"></a>加权轮询</h4><p>跟据配置的权重的大小而分发给不同服务器不同数量的请求。如果不设置，则默认为1。下面服务器的请求顺序为：<code>ABBABBABBABBABB....</code></p>
<pre><code>upstream mysvr &#123; 
    server 127.0.0.1:7878 weight=1;
    server 192.168.10.121:3333 weight=2;
&#125;
</code></pre>
<h4 id="ip-hash"><a href="#ip-hash" class="headerlink" title="ip_hash"></a>ip_hash</h4><p><code>nginx</code>会让相同的客户端<code>ip</code>请求相同的服务器。</p>
<pre><code>upstream mysvr &#123; 
    server 127.0.0.1:7878; 
    server 192.168.10.121:3333;
    ip_hash;
&#125;
</code></pre>
<p>关于nginx负载均衡配置的几个状态参数讲解。</p>
<ul>
<li><code>down</code>，表示当前的<code>server</code>暂时不参与负载均衡。</li>
<li><code>backup</code>，预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候，才会请求<code>backup</code>机器，因此这台机器的压力最轻。</li>
<li><code>max_fails</code>，允许请求失败的次数，默认为1。当超过最大次数时，返回<code>proxy_next_upstream</code> 模块定义的错误。</li>
<li><code>fail_timeout</code>，在经历了<code>max_fails</code>次失败后，暂停服务的时间。<code>max_fails</code>可以和<code>fail_timeout</code>一起使用。</li>
</ul>
<pre><code>upstream mysvr &#123; 
    server 127.0.0.1:7878 weight=2 max_fails=2 fail_timeout=2;
    server 192.168.10.121:3333 weight=1 max_fails=2 fail_timeout=1;    
&#125;
</code></pre>
<h3 id="include"><a href="#include" class="headerlink" title="include"></a>include</h3><p>一个<code>nginx</code>可以管理很多服务器，随着需要配置的东西越来越多，配置文件也越来越长。</p>
<p>所以为了简化文件，可以使用<code>include</code>。</p>
<p>如把<code>server</code>模块和对应的<code>upstream</code>写在一个文件里，通过引入的方式，可以是配置文件更加清晰。</p>
<p>如</p>
<pre><code># Load configs
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
</code></pre>
<pre><code class="shell">user root root; #使用什么用户启动NGINX 在运行时使用哪个用户哪个组
worker_processes 4; #启动进程数，一般是1或8个，根据你的电脑CPU数，一般8个
worker_cpu_affinity 00000001 00000010 00000100 00001000; #CPU逻辑数——把每个进程分别绑在CPU上面，为每个进程分配一个CPU
#pid /usr/local/nginx/logs/nginx.pid
worker_rlimit_nofile 102400; #一个进程打开的最大文件数目，与NGINX并发连接有关系
 
#工作模式及连接数上限
events
&#123;
  use epoll; #多路复用IO 基于LINUX2.6以上内核，可以大大提高NGINX的性能 uname -a查看内核版本号
  worker_connections 102400; #单个worker process最大连接数,其中NGINX最大连接数＝连接数*进程数,一般1GB内存的机器上可以打开的最大数大约是10万左右
  multi_accept on;   #尽可能多的接受请求，默认是关闭状态
&#125;
 
#处理http请求的一个应用配置段
http
&#123;
  #引用mime.types,这个类型定义了很多，当web服务器收到静态的资源文件请求时，依据请求文件的后缀名在服务器的MIME配置文件中找到对应的MIME #Type，根据MIMETYPE设置并response响应类型（Content-type）
  include       mime.types;
  default_type  application/octet-stream; #定义的数据流，有的时候默认类型可以指定为text,这跟我们的网页发布还是资源下载是有关系的
  fastcgi_intercept_errors on; #表示接收fastcgi输出的http 1.0 response code
  charset utf-8;
  server_names_hash_bucket_size 128; #保存服务器名字的hash表
  #用来缓存请求头信息的，容量4K，如果header头信息请求超过了，nginx会直接返回400错误，先根据client_header_buffer_size配置的值分配一个buffer，如果##分配的buffer无法容纳request_line/request_header，那么就会##再次根据large_client_header_buffers配置的参数分配large_buffer，如果large_buffer还是无#法容纳，那么就会返回414（处理request_line）/400（处理request_header）错误。
  client_header_buffer_size 4k;
  large_client_header_buffers 4 32k;
  client_max_body_size 300m; #允许客户端请求的最大单文件字节数 上传文件时根据需求设置这个参数
  #指定NGINX是否调用这个函数来输出文件，对于普通的文件我们必须设置为ON，如果NGINX专门做为一个下载端的话可以关掉，好处是降低磁盘与网络的IO处理数及#系统的UPTIME
  sendfile on;
  #autoindex on;开启目录列表访问，适合下载服务器
  tcp_nopush on; #防止网络阻塞
  #非常重要，根据实际情况设置值，超时时间，客户端到服务端的连接持续有效时间，60秒内可避免重新建立连接，时间也不能设太长，太长的话，若请求数10000##，都占用连接会把服务托死
  keepalive_timeout 60;
  tcp_nodelay on; #提高数据的实时响应性
  client_body_buffer_size 512k; #缓冲区代理缓冲用户端请求的最大字节数（请求多）
 
  proxy_connect_timeout   5; #nginx跟后端服务器连接超时时间（代理连接超时）
  proxy_read_timeout      60; #连接成功后，后端服务器响应时间(代理接收超时)
  proxy_send_timeout      5; #后端服务器数据回传时间(代理发送超时)
  proxy_buffer_size       16k; #设置代理服务器（nginx）保存用户头信息的缓冲区大小
  proxy_buffers           4 64k; #proxy_buffers缓冲区，网页平均在32k以下的话，这样设置
  proxy_busy_buffers_size 128k; #高负荷下缓冲大小
  proxy_temp_file_write_size 128k; #设定缓存文件夹大小，大于这个值，将从upstream服务器传
 
  gzip on; #NGINX可以压缩静态资源，比如我的静态资源有10M，压缩后只有2M，那么浏览器下载的就少了
  gzip_min_length  1k;
  gzip_buffers     4 16k;
  gzip_http_version 1.1;
  gzip_comp_level 2; #压缩级别大小,最小1,最大9.值越小,压缩后比例越小,CPU处理更快,为1时,原10M压缩完后8M,但设为9时,压缩完可能只有2M了。一般设置为2
  gzip_types       text/plain application/x-javascript text/css application/xml; #压缩类型:text,js css xml 都会被压缩
  gzip_vary on; #作用是在http响应中增加一行目的是改变反向代理服务器的缓存策略
 
#日志格式
log_format  main &#39;$remote_addr - $remote_user [$time_local] &quot;$request&quot; &#39; #ip 远程用户 当地时间  请求URL
                 &#39;$status $body_bytes_sent &quot;$http_referer&quot; &#39; #状态  发送的大小  响应的头
         &#39;&quot;$http_user_agent&quot; $request_time&#39;; #客户端使用的浏览器  页面响应的时间
 
#动态转发
upstream web1 &#123;
    #每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。配置了ip_hash就没有负载均衡的效果了，每次访问的都是同一个tomcat
    #ip_hash;
    #转发的后端的tomcat服务器,weight表示转发的权重,越大转发的次数越多,机器性能不一样配置的weight值不一样
     server   127.0.0.1:8080 weight=1 max_fails=2 fail_timeout=30s;
     server   127.0.0.1:8081 weight=1 max_fails=2 fail_timeout=30s;
&#125;
upstream web2 &#123;
     server   127.0.0.1:8090 weight=1 max_fails=2 fail_timeout=30s;
     server   127.0.0.1:8091 weight=1 max_fails=2 fail_timeout=30s;
&#125;
 
server &#123;
    listen       80; #监听80端口
    server_name  www.dbspread.com; #域名
    index  index.jsp index.html index.htm;
    root   /usr/local/nginx/html; #定义服务器的默认网站根目录位置
 
    #监听完成以后通过斜杆(/)拦截请求转发到后端的tomcat服务器
    location /
        &#123;
            #如果后端的服务器返回502、504、执行超时等错误，自动将请求转发到upstream负载均衡池中的另一台服务器，实现故障转移。
            proxy_next_upstream http_502 http_504 error timeout invalid_header;
            proxy_set_header Host  $host; #获取客户端的主机名存到变量Host里面,从而让tomcat取到客户端机器的信息
            proxy_set_header X-Real-IP $remote_addr; #获取客户端的主机名存到变量X-Real-IP里面,从而让tomcat取到客户端机器的信息
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_pass http://web1; #跳转到对应的应用web1
        &#125;
 
       # location ~ .*\.(php|jsp|cgi|shtml)?$ #动态分离 ~匹配 以.*结尾（以PHP JSP结尾走这段）
       #  &#123;
       #     proxy_set_header Host  $host;
       #        proxy_set_header X-Real-IP $remote_addr;
       #        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
       #        proxy_pass http://jvm_web2;
       # &#125;
 
        #静态分离 ~匹配 以.*结尾（以PHP JSP结尾走这段），当然不是越久越好，如果有10000个用户在线，都保存几个月，系统托跨
        location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|txt|js|css)$
        &#123;
            root /var/local/static;
            expires    30d;
        &#125;
 
        #日志级别有[debug|info|notice|warn|error|crit]  error_log 级别分为 debug, info, notice, warn, error, crit  默认为crit, 生产环境用error
        #crit 记录的日志最少,而debug记录的日志最多
        access_log  /usr/local/logs/web2/access.log main;
        error_log   /usr/local/logs/web2/error.log  crit;
 
    &#125;
 
&#125;
</code></pre>

      </div>
        <div class="support-author">
          <p>感谢您的阅读。 🙏
          <a href="" target="_blank">关于转载请看这里</a>
            <!--<a class="btn-pay"  href="#pay-modal">¥ 打赏支持</a>-->
          </p>
        </div>
        <!--
            <div class="like ">
              <div class="like-button">
                <a id="like-note" href="">
                  <i class="icon-heart"></i>喜欢
                </a>
              </div>
              <span id="likes-count">256</span>
            </div>
        -->
        <div class="otherLink">
          <div class="previous">
          </div>
          <div class="next">
          </div>
        </div>
        <div class="comments" id="comments">
          

        </div>
      </div>
    </div>
   </div>
</main>
<div class="footer">
  <div class="info">
    <p>
    <a target="_blank" rel="noopener" href="https://hexo.io"> Hexo </a> 强力驱动 |
      <a target="_blank" rel="noopener" href="https://github.com/Youthink/hexo-themes-yearn"> Yearn </a>
      主题
    </p>
    <p>&copy;2013-2018 某某的博客 京ICP备xxxxxx号</p>
  </div>
</div>
<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>

<script>//console
  var consoleConfig = ''.split(',');
  var canConsole = ;
  var consoleInfo = (function(consoleConfig) {
  if (!canConsole || !consoleConfig || consoleConfig.length < 1) {
    return;
  }
  var consoleColor = '#6190e8';
  var _console;
  var backgroundTextStyle = 'padding: 1px 5px;color: #fff;background: ' + consoleColor + ';'
  var textStyle = 'color: ' + consoleColor + ';';

  consoleConfig.map(o => {
    var num = (o.match(/%c/g) || []).length;
    if(/^http(s)?:\/\//.test(o)) {
      console.log('%c     ', 'background: url(' + o + ') no-repeat left center;font-size: 180px;');
      return;
    }
    if (num > 0) {
      var logArguments = [];
      for (var i = 0; i < num; i++) {
        if (i % 2 === 0) {
          logArguments.push(backgroundTextStyle);
        } else {
          logArguments.push(textStyle);
        }
      }
      (_console = console).log.apply(_console, ['%c' + o, textStyle].concat(logArguments));
      return;
    }
    console.log('%c' + o, textStyle);
  });
}(consoleConfig));</script><script type="text/javascript" src="/./js/main.js"></script>

  <script src="//at.alicdn.com/t/font_159214_mvtxvg9me9.js"></script>
</body>
</html>
